package ar.com.larreta.vista.client;

import com.extjs.gxt.ui.client.widget.HorizontalPanel;
import com.extjs.gxt.ui.client.widget.Label;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.VerticalPanel;
import com.extjs.gxt.ui.client.widget.form.Field;

public abstract class CampoEntrada {

	protected Label etiqueta;
	protected VerticalPanel panelEtiqueta;
	protected VerticalPanel panelCampoTexto;
	
	public CampoEntrada(String descripcion, Object valor) {
		super();
		
		etiqueta = new Label(descripcion);
		panelEtiqueta = new VerticalPanel();
		panelCampoTexto = new VerticalPanel();

		panelEtiqueta.setWidth(Tamanios.ANCHO_ETIQUETA + Tamanios.MARGEN_ENTRE_OBJETOS);
		panelCampoTexto.setWidth(Tamanios.ANCHO_CAJA_DE_TEXTO + Tamanios.MARGEN_ENTRE_OBJETOS);
		
		etiqueta.setWidth(Tamanios.ANCHO_ETIQUETA);
		Field campo = getCampo();
		if (campo!=null){
			if (valor!=null){
				campo.setValue(valor);
			}
			campo.setWidth(Tamanios.ANCHO_CAJA_DE_TEXTO);
		}

	}
	
	public CampoEntrada(String descripcion, Object valor, Integer tamanioDescripcion, Integer tamanioCampo) {
		this(descripcion, valor);
		
		etiqueta.setWidth(tamanioDescripcion);
		getCampo().setWidth(tamanioCampo);

		panelEtiqueta.setWidth(tamanioDescripcion + Tamanios.MARGEN_ENTRE_OBJETOS);
		panelCampoTexto.setWidth(tamanioCampo + Tamanios.MARGEN_ENTRE_OBJETOS);
		
	}

	
	public Label getEtiqueta() {
		return etiqueta;
	}

	public void setEtiqueta(Label etiqueta) {
		this.etiqueta = etiqueta;
	}

	public HorizontalPanel getHorizontal(){
		return (HorizontalPanel) agregarCampos(new HorizontalPanel());
	}

	public VerticalPanel getVertical(){
		return (VerticalPanel) agregarCampos(new VerticalPanel());
	}
	
	private LayoutContainer agregarCampos(LayoutContainer panel) {
		panelEtiqueta.add(etiqueta);
		panel.add(panelEtiqueta);
		panelCampoTexto.add(getCampo());
		panel.add(panelCampoTexto);
		return panel;
	}
	
	public abstract Field getCampo();
}
